package vistas.ventanas;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Date;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import com.toedter.calendar.JDateChooser;

import daos.EntrenadorDAO;
import entidades.Entrenador;
import entidades.enums.Cinturon;
import entidades.enums.Dan;
import entidades.enums.TipoSangre;

public class EditarEntrenador extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JTextField id, apellidos, nombres, direccion, telefonoA, telefonoB;
	private JDateChooser nacimiento, ingreso;
	private JComboBox<Dan> dan;
	private JComboBox<TipoSangre> tipoSangre;
	private JButton editar, cancelar;
	private EntrenadorDAO entrenadorDAO;
	private JRadioButton activo;
	private Integer FLAG;
	public static final int MODIFICAR = 3;
	public static final int ELIMINAR = 4;
	public static final int AGREGAR = 5;

	public EditarEntrenador() {
		setTitle("Agregar nuevo entrenador");
		instanciar_componentes();
		cargar_componentes();
		listeners();
		pack();
		setModal(true);
		setVisible(true);
	}

	public EditarEntrenador(Integer identificador, int flag) {
		setTitle("Datos del entrenador");
		instanciar_componentes();
		FLAG = flag;
		cargar_componentes();
		listeners();
		pack();
		cargar_valores(identificador);
		setModal(true);
		setVisible(true);

	}

	private void instanciar_componentes() {
		FLAG = new Integer(AGREGAR);
		JPanel panel;
		panel = new JPanel();
		panel.setPreferredSize(new Dimension(800, 140));
		setContentPane(panel);
		entrenadorDAO = new EntrenadorDAO();
		id = new JTextField();
		configurar_componente(id, "Cédula");
		apellidos = new JTextField();
		configurar_componente(apellidos, "Apellidos");
		nombres = new JTextField();
		configurar_componente(nombres, "Nombres");
		direccion = new JTextField();
		configurar_componente(direccion, "Dirección");
		telefonoA = new JTextField();
		configurar_componente(telefonoA, "Telefono A");
		telefonoB = new JTextField();
		configurar_componente(telefonoB, "Telefono B");
		dan = new JComboBox<Dan>();
		instanciarCB(dan, "Dan");
		editar = new JButton("Agregar");
		cancelar = new JButton("Cancelar");
		nacimiento = new JDateChooser();
		nacimiento.setMaxSelectableDate(new Date());
		configurar_componente(nacimiento, "Fecha Nacimiento");
		ingreso = new JDateChooser(new Date());
		configurar_componente(ingreso, "Fecha Ingreso");
		tipoSangre = new JComboBox<TipoSangre>();
		configurar_componente(tipoSangre, "Grupo Sanguíneo");
		instanciarTipoSangre(tipoSangre);
		activo = new JRadioButton();
		activo.setText("Activo");
		activo.setSelected(true);
		configurar_componente(activo, "Activo");

	}

	public void cargar_valores(Integer identificador) {
		Entrenador entrenador;
		entrenador = entrenadorDAO.obtenEntrenador(identificador);
		id.setText(String.valueOf(entrenador.getId()));
		apellidos.setText(entrenador.getApellidos());
		nombres.setText(entrenador.getNombres());
		direccion.setText(entrenador.getDireccion());
		telefonoA.setText(entrenador.getTelefonoA());
		telefonoB.setText(entrenador.getTelefonoB());
		nacimiento.setDate(entrenador.getFechaNacimiento());
		ingreso.setDate(entrenador.getFechaInscripcion());
		dan.setSelectedItem(entrenador.getDan());
		tipoSangre.setSelectedItem(entrenador.getTipoSangre());
		activo.setSelected(entrenador.isActivo());
		if (FLAG == MODIFICAR) {
			id.setEnabled(false);
			editar.setText("Modificar");
		}
		if (FLAG == ELIMINAR) {
			id.setEnabled(false);
			apellidos.setEnabled(false);
			nombres.setEnabled(false);
			direccion.setEnabled(false);
			telefonoA.setEnabled(false);
			telefonoB.setEnabled(false);
			dan.setEnabled(false);
			nacimiento.setEnabled(false);
			ingreso.setEnabled(false);
			tipoSangre.setEnabled(false);
			editar.setText("Eliminar");
		}
	}

	private void configurar_componente(JComponent tf, String s) {
		tf.setBorder(BorderFactory.createTitledBorder(s));
		tf.setPreferredSize(new Dimension(150, 40));
		if(tf.getClass() == JDateChooser.class){
			tf.setPreferredSize(new Dimension(150, 50));
		}	
	}

	private void instanciarCB(JComboBox<Dan> cb, String s) {
		cb.setBorder(BorderFactory.createTitledBorder(s));
		cb.setPreferredSize(new Dimension(150, 40));
		cb.addItem(Dan.primero);
		cb.addItem(Dan.segundo);
		cb.addItem(Dan.tercero);
		cb.addItem(Dan.cuarto);
		cb.addItem(Dan.quinto);
		cb.addItem(Dan.sexto);
		cb.addItem(Dan.septimo);
		cb.addItem(Dan.octavo);
		cb.addItem(Dan.noveno);
		cb.addItem(Dan.decimo);

	}

	private void cargar_componentes() {
		add(id);
		add(apellidos);
		add(nombres);
		add(direccion);
		add(telefonoA);
		add(telefonoB);
		add(dan);
		add(nacimiento);
		add(ingreso);
		add(tipoSangre);
		add(activo);
		add(editar);
		add(cancelar);
	}

	private void instanciarTipoSangre(JComboBox<TipoSangre> tipoSangre2) {
		tipoSangre2.addItem(TipoSangre.Apos);
		tipoSangre2.addItem(TipoSangre.Aneg);
		tipoSangre2.addItem(TipoSangre.ABpos);
		tipoSangre2.addItem(TipoSangre.ABneg);
		tipoSangre2.addItem(TipoSangre.Bpos);
		tipoSangre2.addItem(TipoSangre.Bneg);
		tipoSangre2.addItem(TipoSangre.Opos);
		tipoSangre2.addItem(TipoSangre.Oneg);
	}

	private void listeners() {

		editar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					Entrenador entrenador = new Entrenador();
					entrenador.setId(Integer.parseInt(id.getText()));
					entrenador.setApellidos(apellidos.getText());
					entrenador.setNombres(nombres.getText());
					entrenador.setCinturon(Cinturon.negro);
					entrenador.setDan((Dan) dan.getSelectedItem());
					entrenador.setDireccion(direccion.getText());
					entrenador.setTelefonoA(telefonoA.getText());
					entrenador.setTelefonoB(telefonoB.getText());
					entrenador.setFechaInscripcion(new java.sql.Date(ingreso
							.getDate().getTime()));
					entrenador.setFechaNacimiento(new java.sql.Date(nacimiento
							.getDate().getTime()));
					entrenador.setTipoSangre((TipoSangre) tipoSangre
							.getSelectedItem());
					entrenador.setActivo(activo.isSelected());
					
					if(nacimiento.getDate().after( ingreso.getDate())){
						JOptionPane
						.showMessageDialog(null,
								"La fecha de ingreso al sistema debe ser despues que la fecha de nacimiento");
						return;
					}

					if (FLAG == AGREGAR)
						entrenadorDAO.guardaEntrenador(entrenador);
					if (FLAG == MODIFICAR)
						entrenadorDAO.actualizaEntrenador(entrenador);
					if (FLAG == ELIMINAR)
						entrenadorDAO.eliminaEntrenador(entrenador);
					dispose();

				} catch (Exception e2) {
					if (FLAG == ELIMINAR){
						JOptionPane
						.showMessageDialog(null,
								"El entrenador no puede ser eliminado probablemente\n porque participó en un evento\n solo puede colocarlo inactivo");
						return;
					}

					JOptionPane
							.showMessageDialog(null,
									"El usuario ya existe o faltan campos\nVerifique los datos");
				}

			}
		});
		cancelar.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				dispose();

			}
		});

		id.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				char vChar = e.getKeyChar();
				if (!(Character.isDigit(vChar)
						|| (vChar == KeyEvent.VK_BACK_SPACE) || (vChar == KeyEvent.VK_DELETE))) {
					e.consume();
				}
			}
		});

		telefonoA.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				char vChar = e.getKeyChar();
				if (!(Character.isDigit(vChar)
						|| (vChar == KeyEvent.VK_BACK_SPACE) || (vChar == KeyEvent.VK_DELETE))) {
					e.consume();
				}
			}
		});

		telefonoB.addKeyListener(new KeyAdapter() {
			public void keyTyped(KeyEvent e) {
				char vChar = e.getKeyChar();
				if (!(Character.isDigit(vChar)
						|| (vChar == KeyEvent.VK_BACK_SPACE) || (vChar == KeyEvent.VK_DELETE))) {
					e.consume();
				}
			}
		});

	}

}
